Cuando tenemos que concatenar strings en bucle, en vez de hacerlo directamente con el operador + es mas óptimo hacerlo con un StringBuilder.
Si solo vamos a concatenar un string aislado (sin que sea una operación repetitiva), podríamos hacerlo directamente con el operador +.
La implementación del StringBuilder es practicamente identica tanto en Java como en C#
Código para mostrar la diferencia entre operador + y StringBuilder:
import java.util.stream.IntStream;
public class App {
public static void main(String[] args) {
int[] numArray = IntStream.rangeClosed(1, 70000).toArray();
//Usando operador +
long startTime = System.currentTimeMillis();
String cadena = "";
for (int num : numArray) {
cadena += num + ", ";
}
long endTime = System.currentTimeMillis();
long executionTime = endTime - startTime;
System.out.println("Tiempo de ejecución concatenando con el operador +: " + executionTime + "ms");
//Usando StringBuilder
startTime = System.currentTimeMillis();
StringBuilder sb = new StringBuilder();
for (int num : numArray) {
sb.append(num);
sb.append(", ");
}
endTime = System.currentTimeMillis();
executionTime = endTime - startTime;
System.out.println("Tiempo de ejecución con StringBuilder: " + executionTime + "ms");
}
}
Como se puede ver en la ejecución, con el operador + tarda unos 3.600 milisegundos mientras que con el StringBuilder tarda 7 milisegundos.
Java | StringBuilder